---
import astroLogo from '../assets/astro.svg'
import background from '../assets/background.svg'
import type { Post } from 'payload-app'
import type { PaginatedDocs } from 'payload'

interface Props {
  posts: PaginatedDocs<Post>
}

const { posts } = Astro.props
---

<div id="container">
  <img id="background" src={background.src} alt="" fetchpriority="high" />
  <main>
    <section id="hero">
      <a href="https://astro.build"
        ><img src={astroLogo.src} width="115" height="48" alt="Astro Homepage" /></a
      >
      <h1>
        To get started, open the <code><pre>src/pages</pre></code> directory in your project.
      </h1>
      <section id="links">
        <a class="button" href="https://docs.astro.build">Read our docs</a>
        <a href="https://astro.build/chat"
          >Join our Discord <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 127.14 96.36"
            ><path
              fill="currentColor"
              d="M107.7 8.07A105.15 105.15 0 0 0 81.47 0a72.06 72.06 0 0 0-3.36 6.83 97.68 97.68 0 0 0-29.11 0A72.37 72.37 0 0 0 45.64 0a105.89 105.89 0 0 0-26.25 8.09C2.79 32.65-1.71 56.6.54 80.21a105.73 105.73 0 0 0 32.17 16.15 77.7 77.7 0 0 0 6.89-11.11 68.42 68.42 0 0 1-10.85-5.18c.91-.66 1.8-1.34 2.66-2a75.57 75.57 0 0 0 64.32 0c.87.71 1.76 1.39 2.66 2a68.68 68.68 0 0 1-10.87 5.19 77 77 0 0 0 6.89 11.1 105.25 105.25 0 0 0 32.19-16.14c2.64-27.38-4.51-51.11-18.9-72.15ZM42.45 65.69C36.18 65.69 31 60 31 53s5-12.74 11.43-12.74S54 46 53.89 53s-5.05 12.69-11.44 12.69Zm42.24 0C78.41 65.69 73.25 60 73.25 53s5-12.74 11.44-12.74S96.23 46 96.12 53s-5.04 12.69-11.43 12.69Z"
            ></path></svg
          >
        </a>
      </section>
      <section id="posts">
        <h2>Posts Data from Payload Local API</h2>
        <ul id="posts-list">
          {
            posts.docs.map((post) => (
              <li class="post-card">
                <h3>{post.title}</h3>
                <button class="delete-post-button" data-post-id={post.id} type="submit">
                  X
                </button>
              </li>
            ))
          }
        </ul>
        <h3>Create new post</h3>
        <input placeholder="title" name="Title" id="create-new-post-title" />
        <button id="create-new-post-btn" type="submit">Submit</button>
      </section>
    </section>
  </main>

  <a href="https://astro.build/blog/astro-5/" id="news" class="box">
    <svg width="32" height="32" fill="none" xmlns="http://www.w3.org/2000/svg"
      ><path
        d="M24.667 12c1.333 1.414 2 3.192 2 5.334 0 4.62-4.934 5.7-7.334 12C18.444 28.567 18 27.456 18 26c0-4.642 6.667-7.053 6.667-14Zm-5.334-5.333c1.6 1.65 2.4 3.43 2.4 5.333 0 6.602-8.06 7.59-6.4 17.334C13.111 27.787 12 25.564 12 22.666c0-4.434 7.333-8 7.333-16Zm-6-5.333C15.111 3.555 16 5.556 16 7.333c0 8.333-11.333 10.962-5.333 22-3.488-.774-6-4-6-8 0-8.667 8.666-10 8.666-20Z"
        fill="#111827"></path></svg
    >
    <h2>What's New in Astro 5.0?</h2>
    <p>
      From content layers to server islands, click to learn more about the new features and
      improvements in Astro 5.0
    </p>
  </a>
</div>

<script>
  import { actions } from 'astro:actions'

  const addPostCardListener = (card: Element) => {
    const deleteButton = card.querySelector('.delete-post-button')!
    const id = deleteButton.getAttribute('data-post-id')!

    deleteButton.addEventListener('click', async () => {
      await actions.deletePost({ id })
      card.remove()
    })
  }

  document.querySelectorAll('.post-card').forEach((card) => {
    addPostCardListener(card)
  })

  document.getElementById('create-new-post-btn')!.addEventListener('click', async () => {
    const titleEl = document.getElementById('create-new-post-title') as HTMLInputElement

    if (!titleEl.value) {
      return
    }

    const { value: title } = titleEl

    const post = await actions.addPost({ title })

    titleEl.value = ''

    const postsList = document.getElementById('posts-list')!
    const newPost = document.createElement('li')
    newPost.classList.add('post-card')
    newPost.innerHTML = `
    <h3>${title}</h3>
    <button class="delete-post-button" data-post-id="${post.data?.id}" type="submit">X</button>
  `
    postsList.appendChild(newPost)
    addPostCardListener(newPost)
  })
</script>

<style>
  #background {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: -1;
    filter: blur(100px);
  }

  #container {
    font-family: Inter, Roboto, 'Helvetica Neue', 'Arial Nova', 'Nimbus Sans', Arial, sans-serif;
    height: 100%;
  }

  main {
    height: 100%;
    display: flex;
    justify-content: center;
  }

  #hero {
    display: flex;
    align-items: start;
    flex-direction: column;
    justify-content: center;
    padding: 16px;
  }

  h1 {
    font-size: 22px;
    margin-top: 0.25em;
  }

  #links {
    display: flex;
    gap: 16px;
  }

  #links a {
    display: flex;
    align-items: center;
    padding: 10px 12px;
    color: #111827;
    text-decoration: none;
    transition: color 0.2s;
  }

  #links a:hover {
    color: rgb(78, 80, 86);
  }

  #links a svg {
    height: 1em;
    margin-left: 8px;
  }

  #links a.button {
    color: white;
    background: linear-gradient(83.21deg, #3245ff 0%, #bc52ee 100%);
    box-shadow:
      inset 0 0 0 1px rgba(255, 255, 255, 0.12),
      inset 0 -2px 0 rgba(0, 0, 0, 0.24);
    border-radius: 10px;
  }

  #links a.button:hover {
    color: rgb(230, 230, 230);
    box-shadow: none;
  }

  pre {
    font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas,
      'DejaVu Sans Mono', monospace;
    font-weight: normal;
    background: linear-gradient(14deg, #d83333 0%, #f041ff 100%);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
    margin: 0;
  }

  h2 {
    margin: 0 0 1em;
    font-weight: normal;
    color: #111827;
    font-size: 20px;
  }

  p {
    color: #4b5563;
    font-size: 16px;
    line-height: 24px;
    letter-spacing: -0.006em;
    margin: 0;
  }

  code {
    display: inline-block;
    background:
      linear-gradient(66.77deg, #f3cddd 0%, #f5cee7 100%) padding-box,
      linear-gradient(155deg, #d83333 0%, #f041ff 18%, #f5cee7 45%) border-box;
    border-radius: 8px;
    border: 1px solid transparent;
    padding: 6px 8px;
  }

  .box {
    padding: 16px;
    background: rgba(255, 255, 255, 1);
    border-radius: 16px;
    border: 1px solid white;
  }

  #news {
    position: absolute;
    bottom: 16px;
    right: 16px;
    max-width: 300px;
    text-decoration: none;
    transition: background 0.2s;
    backdrop-filter: blur(50px);
  }

  #news:hover {
    background: rgba(255, 255, 255, 0.55);
  }

  @media screen and (max-height: 368px) {
    #news {
      display: none;
    }
  }

  @media screen and (max-width: 768px) {
    #container {
      display: flex;
      flex-direction: column;
    }

    #hero {
      display: block;
      padding-top: 10%;
    }

    #links {
      flex-wrap: wrap;
    }

    #links a.button {
      padding: 14px 18px;
    }

    #news {
      right: 16px;
      left: 16px;
      bottom: 2.5rem;
      max-width: 100%;
    }

    h1 {
      line-height: 1.5;
    }
  }

  #posts {
    margin-top: 2rem;
  }

  #posts h2 {
    font-size: 1.5rem;
    margin-bottom: 1rem;
  }

  #posts ul {
    list-style: none;
    padding: 0;
  }

  #posts li {
    margin-bottom: 0.5rem;
  }

  #posts a {
    text-decoration: none;
    color: #3245ff;
    transition: color 0.2s;
  }

  #posts a:hover {
    color: #bc52ee;
  }
</style>

<style is:global>
  #posts {
    margin-top: 2rem;
    padding: 1rem;
    background: rgba(255, 255, 255, 0.8);
    border-radius: 12px;
    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
  }

  #posts h2 {
    font-size: 1.5rem;
    margin-bottom: 1rem;
    color: #3245ff;
  }

  #posts ul {
    list-style: none;
    padding: 0;
  }

  #posts li {
    margin-bottom: 0.5rem;
    padding: 0.5rem;
    background: #f9f9f9;
    border-radius: 8px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  }

  #posts h3 {
    margin: 0;
    font-size: 1.2rem;
    color: #111827;
  }

  #posts button {
    background: #ff4d4d;
    color: white;
    border: none;
    border-radius: 4px;
    padding: 0.5rem;
    cursor: pointer;
    transition: background 0.2s;
  }

  #posts button:hover {
    background: #ff1a1a;
  }

  #posts input {
    padding: 0.5rem;
    border: 1px solid #ccc;
    border-radius: 4px;
    margin-right: 0.5rem;
  }

  #posts input:focus {
    outline: none;
    border-color: #3245ff;
  }

  #posts button#create-new-post-btn {
    background: #3245ff;
    color: white;
    padding: 0.5rem 1rem;
    border-radius: 4px;
    transition: background 0.2s;
  }

  #posts button#create-new-post-btn:hover {
    background: #1a2dff;
  }
</style>
